From: Alexander Larsson Date: Fri, 3 Feb 2012 15:37:54 +0000 (+0100) Subject: Fix crash with theme resource file X-Git-Tag: archive/raspbian/3.24.39-1+rpi1~1^2~65^2~39^2~18170 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/success/%22http:/www.example.com/cgi/success?a=commitdiff_plain;h=fb0c53a0ed1daf5417bc90af848131416dc13d81;p=gtk%2B3.0.git Fix crash with theme resource file The freeing the GResource in gtk_css_provider_reset caused problems because it was called from gtk_css_provider_load_from_path() inside gtk_css_provider_get_named(). We fix this by delaying the setting of priv->resource until we successfully loaded the file. --- diff --git a/gtk/gtkcssprovider.c b/gtk/gtkcssprovider.c index 86b1c9cca1..a637eee52b 100644 --- a/gtk/gtkcssprovider.c +++ b/gtk/gtkcssprovider.c @@ -2925,18 +2925,24 @@ gtk_css_provider_get_named (const gchar *name, resource_file = g_build_filename (dir, "gtk.gresource", NULL); resource = g_resource_load (resource_file, NULL); if (resource != NULL) - { - provider->priv->resource = resource; - g_resources_register (resource); - } + g_resources_register (resource); if (!gtk_css_provider_load_from_path (provider, path, NULL)) { + if (resource != NULL) + { + g_resources_unregister (resource); + g_resource_unref (resource); + } g_object_unref (provider); provider = NULL; } else - g_hash_table_insert (themes, g_strdup (key), provider); + { + /* Only set this after load success, as load_from_path will clear it */ + provider->priv->resource = resource; + g_hash_table_insert (themes, g_strdup (key), provider); + } g_free (path); }